<#include "macrosDisplay.ftl">
<#include "macrosLoops.ftl">
<#include "tpsTypes.ftl">

package com.tps.gen.bo;

import java.util.*;
import com.tps.type.*;
import com.tps.framework.util.EntityUtils;

import com.tps.framework.core.Entity;

import com.tps.framework.annotation.RelationshipInfo;

import com.tps.framework.hibernate.AbstractHibernateEntity;

/**
 * <p>
 * Represents a(n) <@boCap/>.
 * </p>
 *
 * <p>${bo.description}</p>
 * 
 * <p>Created ${util.getDateString()}</p>
 * 
 * @author Archimedes
 * @version $Id: Interface.ftl 2336 2006-04-20 15:22:05 +0000 (Thu, 20 Apr 2006) erik $
 *
 */
public interface <@boCap/> extends Entity {

<#-- Member Getters and Setters -->
<@concreteMemberLoop>
<@isNotInherited bo, member>
<#--Test and handle for TPS Types -->
<@tpsTypeBeanTest member/>
 
    /**
     * Returns the <@meLow/>.
     *
     * @return <@meType/> value of <@meLow/>
     *
     */
    public <@meType/> get<@meCap/>();

    /**
     * Sets the <@meLow/>
     * @param <@meLow/> The <@meLow/> to set.
     */
    public void set<@meCap/>(<@meType/> <@meLow/>);
</@isNotInherited>   
</@concreteMemberLoop>
 
<@aliasMemberLoop>
<@isNotInherited bo, member>
    /**
     * Returns the <@meLow/>.
     *
     * @return <@meType/> value of <@meLow/>
     */
    public <@meType/> get<@meCap/>();
</@isNotInherited>  
</@aliasMemberLoop>

<@customStringMemberLoop>
<@isNotInherited bo, member>
    /** 
     * @see com.tps.framework.hibernate.AbstractHibernateEntity#get<@meCap/>()
     */
    public <@meType/> get<@meCap/>();
</@isNotInherited>  
</@customStringMemberLoop>

<#-- Loop to handle Getters and Setters -->
<@MTMRelationshipsLoop>
<@isNotInherited bo, relation>
<#-- <M:M with BO in the Source position-->
<#-- <EXAMPLE Order to Item, creates Order.getItems-->
<@isSource bo,relation>
    /**
     * Returns the <@childLowPlural/>.
     *
     * @return List value of <@childLowPlural/>
     */
    @RelationshipInfo(displayKey = "${relation.displayName}", parent = <@boCap/>.class, child = <@childCap/>.class, type = RelationshipInfo.TYPE.ManyToMany, direction = RelationshipInfo.DIRECTION.Bidirectional, internalized = <@internalized/>)
    public Set<<@childCap/>> get<@childCapPlural/>();

    public void set<@childCapPlural/>(Set<<@childCap/>> <@childLowPlural/>);
</@isSource>
<#-- <M:M with BO in the Target position-->
<#-- <EXAMPLE Order to Item, handles Item.getOrders-->
<@isTarget bo,relation>
    /**
     * Returns the <@parentLowPlural/>.
     *
     * @return List value of <@parentLowPlural/>
     */
    @RelationshipInfo(displayKey = "${relation.displayName}", parent = <@childCap/>.class, child = <@parentCap/>.class, type = RelationshipInfo.TYPE.ManyToMany, direction = RelationshipInfo.DIRECTION.Bidirectional, inverse = true, internalized = <@internalized/>)
    public Set<<@parentCap/>> get<@parentCapPlural/>();
    
    public void set<@parentCapPlural/>(Set<<@parentCap/>> <@parentLowPlural/>);
</@isTarget>
</@isNotInherited>
</@MTMRelationshipsLoop>

<#-- Loop to handle Getters and Setters -->
<#-- <1:M with BO in the From position-->
<#-- <EXAMPLE Customer to Order-->
<@OTMRelationshipsLoop>
<@isNotInherited bo, relation>
	/**
     * Returns the <@childLowPlural/>.
     *
     * @return List value of <@childLowPlural/>
     */
    @RelationshipInfo(displayKey = "${relation.displayName}", parent = <@boCap/>.class, child = <@childCap/>.class, type = RelationshipInfo.TYPE.OneToMany, direction = RelationshipInfo.DIRECTION.Bidirectional, internalized = <@internalized/>)
    public Set<<@childCap/>> get<@childCapPlural/>();

    /**
     * Sets the <@childLowPlural/>
     * @param orders The <@childLowPlural/> to set.
     */
    public void set<@childCapPlural/>(Set<<@childCap/>> <@childLowPlural/>);
</@isNotInherited>
</@OTMRelationshipsLoop> 

<#-- Loop to handle Getters and Setters -->
<#-- <1:M with BO in the To position-->
<#-- <EXAMPLE Order from Customer-->
<@OTMRelationshipsLoopInverse>
<@isNotInherited bo, relation>
    /**
     * Returns the <@parentLow/>
     * 
     * @return <@parentCap/> value of customer
     */
    public <@parentCap/> get<@parentCap/>();

    /**
     * Sets the <@parentLow/>
     * @param <@parentCap/> The <@parentLow/> to set.
     */
    public void set<@parentCap/>(<@parentCap/> <@parentLow/>);
</@isNotInherited>
</@OTMRelationshipsLoopInverse>

<#-- Loop to handle Getters and Setters -->
<#-- <M:1 with BO in the SOURCE position-->
<#-- <EXAMPLE Employee (this) has a SINGLE Title -->
<@MTORelationshipsLoop>
<@isNotInherited bo, relation>
    /**
     * Returns the <@childLow/>
     * 
     * @return <@childCap/> value
     */
    @RelationshipInfo(displayKey = "${relation.displayName}", parent = <@boCap/>.class, child = <@childCap/>.class, type = RelationshipInfo.TYPE.ManyToOne, direction = RelationshipInfo.DIRECTION.Bidirectional, internalized = <@internalized/>)
    public <@childCap/> get<@childCap/>();

    /**
     * Sets the <@childLow/>
     * @param <@childCap/> The <@childLow/> to set.
     */
    public void set<@childCap/>(<@childCap/> <@childLow/>);
</@isNotInherited>
</@MTORelationshipsLoop>

<#-- Loop to handle Getters and Setters -->
<#-- <M:1 with BO in the TARGET position-->
<#-- <EXAMPLE Employee has a SINGLE Title (this) -->
<@MTOInverseRelationshipsLoop>
<@isNotInherited bo, relation>
    /**
     * Returns the <@parentLowPlural/>.
     *
     * @return List value of <@parentLowPlural/>
     */
    @RelationshipInfo(displayKey = "${relation.displayName}", parent = <@childCap/>.class, child = <@parentCap/>.class, type = RelationshipInfo.TYPE.OneToMany, direction = RelationshipInfo.DIRECTION.Bidirectional, inverse = true, internalized = <@internalized/>)
    public Set<<@parentCap/>> get<@parentCapPlural/>();
    
    public void set<@parentCapPlural/>(Set<<@parentCap/>> <@parentLowPlural/>);
</@isNotInherited>
</@MTOInverseRelationshipsLoop>

<@abstactMethod bo>
	/**
	 * ${method.desc}
	 */
	public ${method.returns} ${method.name}(${method.params});

</@abstactMethod>

	// @SNIPPET@

}
